//package com.runnet.nhssp.config;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.cloud.context.config.annotation.RefreshScope;
//import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
//import org.springframework.cloud.gateway.route.RouteDefinition;
//import org.springframework.cloud.gateway.route.RouteDefinitionLocator;
//import org.springframework.cloud.gateway.route.RouteDefinitionWriter;
//import org.springframework.context.ApplicationEventPublisher;
//import org.springframework.context.ApplicationEventPublisherAware;
//import org.springframework.stereotype.Component;
//import org.springframework.util.CollectionUtils;
//import reactor.core.publisher.Mono;
//
//import java.util.List;
//
////@RefreshScope
//@Slf4j
////@Component
//public class DynamicRouteConfig implements ApplicationEventPublisherAware {
//
//    @Autowired
//    private RouteDefinitionWriter routeDefinitionWriter;
//    @Autowired
//    private RouteDefinitionLocator routeDefinitionLocator;
//
//    /**
//     * 发布事件
//     */
//    @Autowired
//    private ApplicationEventPublisher publisher;
//
//    @Override
//    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
//        this.publisher = applicationEventPublisher;
//    }
//
//    /**
//     * 删除路由
//     * @param id
//     * @return
//     */
//    public String delete(String id) {
//        try {
//            log.info("gateway delete route id {}",id);
//            this.routeDefinitionWriter.delete(Mono.just(id)).subscribe();
//            this.publisher.publishEvent(new RefreshRoutesEvent(this));
//            return "delete success";
//        } catch (Exception e) {
//            return "delete fail";
//        }
//    }
//
//    /**
//     * 更新路由
//     * @param definitions
//     * @return
//     */
//    public String updateList(List<RouteDefinition> definitions) {
//        log.info("gateway update route {}",definitions);
//        // 删除缓存routerDefinition
//        List<RouteDefinition> routeDefinitionsExits =  routeDefinitionLocator.getRouteDefinitions().buffer().blockFirst();
//        if (!CollectionUtils.isEmpty(routeDefinitionsExits)) {
//            routeDefinitionsExits.forEach(routeDefinition -> {
//                log.info("delete routeDefinition:{}", routeDefinition);
//                delete(routeDefinition.getId());
//            });
//        }
//        definitions.forEach(definition -> {
//            updateById(definition);
//        });
//        return "success";
//    }
//
//    /**
//     * 更新路由
//     * @param definition
//     * @return
//     */
//    public String updateById(RouteDefinition definition) {
//        try {
//            log.info("gateway update route {}",definition);
//            this.routeDefinitionWriter.delete(Mono.just(definition.getId()));
//        } catch (Exception e) {
//            return "update fail,not find route  routeId: "+definition.getId();
//        }
//        try {
//            routeDefinitionWriter.save(Mono.just(definition)).subscribe();
//            this.publisher.publishEvent(new RefreshRoutesEvent(this));
//            return "success";
//        } catch (Exception e) {
//            return "update route fail";
//        }
//    }
//
//    /**
//     * 增加路由
//     * @param definition
//     * @return
//     */
//    public String add(RouteDefinition definition) {
//        log.info("gateway add route {}",definition);
//        routeDefinitionWriter.save(Mono.just(definition)).subscribe();
//        this.publisher.publishEvent(new RefreshRoutesEvent(this));
//        return "success";
//    }
//}
